確認したレベルでは「各セクション毎にマージされる」です。
調べる
例えばモノレポなどでルート.eslintrcを1つ置き、各ワークスペースにも.eslintrcを置いているとします。
# tree
.
├── ...
├── .eslintrc
└── packages
└── foo
├── ...
└── .eslintrcルートの設定
ルートの設定は適当にこんな感じにしました。
{
"root": true,
"env": {
"browser": false,
"node": false
},
"rules": {
"no-unused-vars": 0,
"eqeqeq": 0
}
}ワークスペースの設定
上記でのpackages/foo/.eslintrcをこのようにしました。
{
"env": {
"node": true
},
"rules": {
"no-unused-vars": 2
}
}さて、ここでpackages/foo以下のファイルへの設定は考えられるもので、
マージされる(完全に置き換わる)
各セクションレベルでマージされる(ディープマージ)
どれが正解なのかという疑問がでてきました。
調べる
対象のファイルへ適用される設定を調べるには--print-configオプションが使えます。
ルートで、
eslint --print-config packages/foo/foo.js結果はこうでした。(envとrules以外のセクションは削除してます)
{
"env": {
"browser": false,
"node": true
},
"rules": {
"no-unused-vars": 2,
"eqeqeq": 0
},
"root": true
}完全に置き換えたい
そんな時は子.eslintrcにroot:trueを追加します。実は ESLint はルート設定まで遡り設定をディープマージしていくような動作をします。これがroot:trueにより「自分自身ファイルがルートです」となることでで親設定を拾わず、それだけの設定にすることができます。
{
"root": true,
"env": {
"node": true
},
"rules": {
"no-unused-vars": 2
}
}結果。
{
"env": {
"node": true
},
"rules": {
"no-unused-vars": 2
},
"root": true
}